# 导入socket库
import threading
from socket import *


def tcp_server():
    # 主机地址为0.0.0.0，表示绑定本机所有网络接口ip地址
    IP = '0.0.0.0'
    # 设置端口号
    PORT = 5000

    # 实例化socket对象
    ServerSocket = socket(AF_INET, SOCK_STREAM)

    # socket绑定地址和端口
    ServerSocket.bind((IP, PORT))

    # socket监听，等待客户端连接请求，参数为最多接受5个客户端连接
    ServerSocket.listen(5)
    print("正在等待客户端连接......")

    try:
        while True:
            # 获取套接字和ip端口
            dataSocket, addr = ServerSocket.accept()
            print(f"客户端连接  ip:{addr[0]} 端口:{addr[1]}")
            # 创建子线程，防止堵塞
            client_thread = threading.Thread(target=handle_client, args=(dataSocket, addr))
            client_thread.start()
    except:
        ServerSocket.close()


def handle_client(dataSocket, addr):
    while True:
        # 读取缓冲区数据
        recv = dataSocket.recv(1024)

        # 如果返回空，说明对方关闭了连接，退出循环
        if not recv:
            break

        # 将bytes数据解析成字符串
        info = recv.decode()

        print(f"收到来自{addr[0]}:{addr[1]}的信息：{info}")

        # 服务器发送信息
        dataSocket.send(f"服务端收到了信息：{info}".encode())

    # 服务端关闭socket
    dataSocket.close()
    return -1


if __name__ == '__main__':
    tcp_server()
